from threading import Thread

from queue import Queue

# 全局变量统计网站的点击次数

click_rate_num = 0


# 用于统计点击量

def count_click_rate():

    """

    如果可以从queue_click拿到一个值，就把click_rate_rum +1

    队列的最大等待时间是5秒，5秒后仍没有拿到队列数据，就结束循环

    """
    global click_rate_num
    while True:
            try:
                queue_click.get(timeout=5)
                click_rate_num += 1
            except:
                 break


def user_request():

    for i in range(1000):
     # 处理请求
     # 给用户响应过去网页资源
     # 点击量+1
        queue_click.put(1)
     # 释放资源


if __name__ == '__main__':
     # 实例化一个用于统计点击量的队列
    queue_click = Queue()
     # 每个线程表示不停的在访问网站的用户
     # 创建100个这样的线程，保存在user_thread_s集合里面
    user_thread_s = []
    for i in range(100):
         user_thread_s.append(Thread(target=user_request))
     # 创建一个符合统计全局点击量的线程，并开启
    count_click_thread = Thread(target=count_click_rate)
    count_click_thread.start()
     # 开启模拟用户点击的线程
    for user_thread in user_thread_s:
        user_thread.start()
     # 等待所有的用户点击线程都结束了之后，放行 主线程
    for user_thread in user_thread_s:
        user_thread.join()
     # 等待统计点击量的线程运行完，放行主线程
    count_click_thread.join()
     # 打印总共获得的点击量
    print(click_rate_num)
